package mybatis.main;

import static java.lang.System.out;

import java.io.Reader;

import mybatis.domain.Post;
import mybatis.domain.Search;
import mybatis.domain.User05;
import mybatis.mapper.Mapper06;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

//mapper06.xml, SqlMapConfig.xml
public class Main06 {	
	public static void main(String[] args) throws Exception{		
		Reader reader = Resources.getResourceAsReader("config/SqlMapConfig.xml");		
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);		
		SqlSession sqlSession = sqlSessionFactory.openSession();
		
		Mapper06 mapper = sqlSession.getMapper(Mapper06.class);
		
		Search search = new Search();
		search.setUserName("고석한");
		Post post = new Post();		
		search.setPost(post);		
				
		out.println("[getUsers-1]");
		post.setSubject("사랑");
		post.setBody(""); //isEmpty(): null문자열 이라도 있어야,NullPointerException을 피한다.
		for(User05 user: mapper.getUsers(search)) 
			out.println(user);
	
		out.println("[getUsers-2]");
		post.setSubject(null);
		post.setBody("이렇게");
		for(User05 user: mapper.getUsers(search)) 
			out.println(user);
		
		out.println("[getUsers-3]");
		post.setSubject("몸");
		post.setBody("이렇게");
		for(User05 user: mapper.getUsers(search)) 
			out.println(user);
		
		
		out.println("[getUsers02]");
		search.setUserName("최한석");
		post.setSubject("몸"); 
		post.setBody("이렇게");//<choose>는 먼저 선택된 <when>만 사용하므로 이 조건은 무시된다.
		for(User05 user: mapper.getUsers02(search)) 
			out.println(user);
		
		
		out.println("[getUsers03-1]");
		search.setUserName("고석한");
		post.setSubject("몸"); 
		post.setBody("이렇게");
		for(User05 user: mapper.getUsers03(search)) 
			out.println(user);
		
		out.println("[getUsers03-2]");
		//<where>은 <if>가 하나 이상 리턴되면 where 구문을 작성한다.
		//where 절에서 and가 가장 먼저 등장하면 and를 없애서 문장을 문법에 맞게 조정한다.
		search.setUserName(null);  
		for(User05 user: mapper.getUsers03(search)) 
			out.println(user);
	}
}